package com.jfinal.ext.sql;



/**
 * SQL语句生成封装，参考Hibernate的QBC
 * 
 * @author 罗盛力
 */
public class Criterion  extends Criteria{
	
	public Criterion(String entityName) {
		super(entityName);
	}

	/**
	 * 字段值为空
	 * 
	 * @param param
	 *            字段名
	 */
	public static Criterion isNull(String param) {
		sqlStr.append(" and ").append(param).append(IS_NULL);
		return expression;
	}

	/**
	 * 字段值非空
	 * 
	 * @param param
	 *            字段名
	 */
	public  static Criterion notNull(String param) {
		sqlStr.append(" and ").append(param).append(NOT_NULL);
		return expression;
	}

	/**
	 * 字段值不等于给定值
	 * 
	 * @param param
	 *            字段名
	 * @param value
	 *            给定值
	 */
	public static Criterion ne(String param, Object value) {
		sqlStr.append(" and ").append(param).append(NO_EQUAL)
				.append(PLACEHOLDER);
		values.add(value);
		return expression;
	}

	/**
	 * 字段值等于给定值
	 * 
	 * @param param
	 *            字段名
	 * @param value
	 *            给定值
	 */
	public static Criterion eq(String param, Object value) {
		sqlStr.append(" and ").append(param).append(EQUAL).append(PLACEHOLDER);
		values.add(value);
		return expression;
	}

	/**
	 * 字段值小于给定值
	 * 
	 * @param param
	 *            字段名
	 * @param value
	 *            给定值
	 */
	public static Criterion lt(String param, Object value) {
		sqlStr.append(" and ").append(param).append(LT).append(PLACEHOLDER);
		values.add(value);
		return expression;
	}

	/**
	 * 字段值小于或者等于给定值
	 * 
	 * @param param
	 *            字段名
	 * @param value
	 *            给定值
	 */
	public static Criterion le(String param, Object value) {
		sqlStr.append(" and ").append(param).append(LE).append(PLACEHOLDER);
		values.add(value);
		return expression;
	}

	/**
	 * 字段值大于给定值
	 * 
	 * @param param
	 *            字段名
	 * @param value
	 *            给定值
	 */
	public static Criterion gt(String param, Object value) {
		sqlStr.append(" and ").append(param).append(GT).append(PLACEHOLDER);
		values.add(value);
		return expression;
	}

	/**
	 * 字段值大于或者等于给定值
	 * 
	 * @param param
	 *            字段名
	 * @param value
	 *            给定值
	 */
	public static Criterion ge(String param, Object value) {
		sqlStr.append(" and ").append(param).append(GE).append(PLACEHOLDER);
		values.add(value);
		return expression;
	}

	/**
	 * 字段值在某范围内
	 * 
	 * @param paramName
	 *            字段名
	 * @param firstVal
	 *            范围的起始
	 * @param secondVal
	 *            范围的结束
	 */
	public static Criterion between(String paramName, Object firstVal,
			Object secondVal) {
		sqlStr.append(" and ").append(paramName).append(BETWEEN)
				.append(PLACEHOLDER).append(" and ").append(PLACEHOLDER);
		values.add(firstVal);
		values.add(secondVal);
		return expression;
	}

	/**
	 * 字段值不在某范围内
	 * 
	 * @param paramName
	 *            字段名
	 * @param firstVal
	 *            范围的起始
	 * @param secondVal
	 *            范围的结束
	 */
	public static Criterion nb(String paramName, Object firstVal, Object secondVal) {
		sqlStr.append(" and ").append(paramName).append(NO_BETWEEN)
				.append(PLACEHOLDER).append(" and ").append(PLACEHOLDER);
		values.add(firstVal);
		values.add(secondVal);
		return expression;
	}
}
